
https://leetcode.cn/problems/longest-arithmetic-subsequence/description/
//class Solution {
//public:
//    int longestArithSeqLength(vector<int>& nums)
//    {
//        unordered_map<int, int> hash;
//        hash[nums[0]] = 0;
//        int n = nums.size();
//        vector<vector<int>> dp(n, vector<int>(n, 2));
//        int ret = 2;
//        for (int i = 1; i < n; i++)
//        {
//            for (int j = i + 1; j < n; j++)
//            {
//                int a = 2 * nums[i] - nums[j];
//                if (hash.count(a)) dp[i][j] = dp[hash[a]][i] + 1;
//                ret = max(ret, dp[i][j]);
//            }
//            hash[nums[i]] = i;
//        }
//        return ret;
//    }
//};

https://leetcode.cn/problems/Q91FMA/description/
//class Solution {
//public:
//    int lenLongestFibSubseq(vector<int>& arr)
//    {
//        int n = arr.size();
//        unordered_map<int, int> hash;
//        for (int i = 0; i < n; i++) hash[arr[i]] = i;
//
//        vector<vector<int>> dp(n, vector<int>(n, 2));
//        int max1 = 2;
//        for (int i = 2; i < n; i++)
//        {
//            for (int j = 1; j < i; j++)
//            {
//                int a = arr[i] - arr[j];
//                if (a < arr[j] && hash.count(a)) dp[j][i] = dp[hash[a]][j] + 1;
//                max1 = max(max1, dp[j][i]);
//            }
//
//        }
//        if (max1 < 3)
//        {
//            return 0;
//        }
//        return max1;
//
//    }
//};